package com.jzo2o.common.utils;

import cn.hutool.core.util.ArrayUtil;
import com.jzo2o.common.handler.ConvertHandler;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 数组工具类，继承hutool的ArrayUtil并扩展数组转列表及类型转换功能
 **/
public class ArrayUtils extends ArrayUtil {

    /**
     * 将源数组转换为指定类型的List（无自定义字段转换）
     *
     * @param originList  待转换的源数组
     * @param targetClazz 目标List元素的类型Class
     * @param <R>         源数组元素的类型
     * @param <T>         目标List元素的类型
     * @return 转换后的目标类型List；源数组为空时返回null
     */
    public static <R, T> List<T> convert(R[] originList, Class<T> targetClazz) {
       return convert(originList, targetClazz, null);

    }

    /**
     * 将源数组转换为指定类型的List，支持自定义字段转换
     *
     * @param originList  待转换的源数组
     * @param targetClazz 目标List元素的类型Class
     * @param convert     自定义字段转换器（处理特殊字段转换，可传null）
     * @param <R>         源数组元素的类型
     * @param <T>         目标List元素的类型
     * @return 转换后的目标类型List；源数组为空时返回null
     */
    public static <R, T> List<T> convert(R[] originList, Class<T> targetClazz, ConvertHandler<R, T> convert) {
        if (isEmpty(originList)) {
            return null;
        }

        return Arrays.stream(originList)
                .map(origin -> BeanUtils.copyBean(origin, targetClazz, convert))
                .collect(Collectors.toList());

    }
}
